package com.foreknow.demo24;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 预处理 PreparedStatement接口
 * PreparedStatement	prepareStatement(String sql)
 * 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
 * sql - 可能包含一个或多个 '?' IN 参数占位符的 SQL 语句
 * <p>
 * void	setInt(int parameterIndex, int x) 将指定参数设置为给定 Java int 值。
 * parameterIndex - 第一个参数是 1，第二个参数是 2，……     x - 参数值
 */
public class PreparedStatementDemo {
  public static void main(String[] args) {
    try {
      Class.forName("com.mysql.jdbc.Driver");
      Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/demodb?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "zjjlive82");
      //获取到到PreparedStatement接口
      PreparedStatement pstmt = connection.prepareStatement("select * from emp where empno=? and ename=?");
      //将？替换为具体的值
      pstmt.setInt(1, 1002);
      pstmt.setString(2,"SMITH");
      //执行查询
      ResultSet rs = pstmt.executeQuery();
      List<Emp> list = new ArrayList<>();
      while (rs.next()) {
        Emp emp = new Emp();
        emp.setEmpno(rs.getInt("empno"));
        emp.setEname(rs.getString("ename"));
        emp.setJob(rs.getString("job"));
        list.add(emp);
      }
      //遍历集合
      for (Emp emp : list) {
        System.out.println(emp.getEmpno() + "---" + emp.getEname() + "---" + emp.getJob());
      }
      rs.close();
      pstmt.close();
      connection.close();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }

  }
}
